<?php



/**
 * AdministracePresenter.
 */
class AdministracePresenter extends BasePresenter
{
    /** @persistent */
    public $backlink = '';
    
    protected function startup() {
        parent::startup();
        
        $this->setLayout("admin");
        $this->template->robots = "noindex,follow";
        $this->template->hideUser = TRUE;
    }
    
    public function renderDefault() {
        
    }
    
    public function renderAktivace() {
        
    }
    
    public function renderOdhlasit()
    {        
        $this->getUser()->logout();
        $this->flashMessage('Byl jste odhlášen');
        $this->redirect('default');
    }
    
    public function renderDokonceniAktivace($id, $code) {
        $agentModel = new AgentModel($this->db);
        $user = $agentModel->get($id);
        
        try {
            if ($user === FALSE) { throw new NAuthenticationException("Uživatel s požadovaným id v systému neexistuje"); }
            if ($user->confirmed) { throw new NAuthenticationException("Uživatel s požadovaným id už má účet aktivován"); }
            if ($user->confirm_code != $code) { throw new NAuthenticationException("Aktivační kód není platný"); }
            
            $agentModel->where("id", $user->id)->update(array("confirmed" => 1));
            $this->flashMessage("Váš účet byl aktivován a nyní se můžete přihlásit."); 
        } catch (NAuthenticationException $e) {
            $this->flashMessage($e->getMessage() ,"error");            
        }
        
        $this->redirect("default");
    }

    protected function createComponentSignInForm() {
        $form = new NAppForm;
        $form->addText('username', 'Uživatelské jméno:')
                ->setRequired('Uživatelské jméno je povinné.');

        $form->addPassword('password', 'Heslo:')
                ->setRequired('Heslo je povinné.');

        $form->addCheckbox('remember', 'Zapomatuj si mě na tomto počítači.');

        $form->addSubmit('send', 'Přihlásit');

        $form->onSuccess[] = $this->signInFormSubmitted;
        return $form;
    }

    public function signInFormSubmitted($form) {
        try {
            $values = $form->getValues();
            if ($values->remember) {
                    $this->getUser()->setExpiration('+ 14 days', FALSE);
            } else {
                    $this->getUser()->setExpiration('+ 20 minutes', TRUE);
            }
            $this->getUser()->login($values->username, $values->password);
            $this->restoreRequest($this->backlink);
            $this->redirect('UcetAdmin:');
        } catch (NAuthenticationException $e) {
            $form->addError($e->getMessage());
        }
    }
    
    protected function createComponentActivationForm() {
        $form = new NAppForm;
        $form->addText('mail', 'E-mail:')
                ->setRequired('Uživatelské jméno je povinné.');

        $form->addPassword('password', 'Heslo (min. 6 znaků):')
                ->setRequired('Heslo je povinné.')
                ->addRule(NForm::MIN_LENGTH, "Minimální délka hesla je 6 znaků", 6);
        
        $form->addPassword('passwordRep', 'Heslo znovu:')
                ->setRequired('Zopakování hesla je povinné.');

        $form->addSubmit('send', 'Aktivovat');

        $form->onSuccess[] = $this->activationFormSubmitted;
        return $form;
    }
    
    /**
     * 
     *
     * @param NAppForm $form 
     */
    public function activationFormSubmitted($form) {
        try {
            $values = $form->getValues();
        
            $agentModel = new AgentModel($this->db);
            $user = $agentModel->where("email", $values["mail"])->fetch();
            
            if ($user === FALSE) { throw new NAuthenticationException("Uživatel se zadaným e-mailem v systému neexistuje"); }
            if ($user->confirmed) { throw new NAuthenticationException("Uživatel se zadaným e-mailem už má účet aktivován"); }
            if ($values["password"] !== $values["passwordRep"]) { throw new NAuthenticationException("Zadaná hesla se neshodují"); }
            
            $password = Authenticator::calculateHash($values["password"], $user->lastname);
            $confirmCode = Authenticator::calculateHash($values["password"], $user->firstname);
            
            $message = 
                '<p>Tato zpráva byla automaticky vygenerována na základě požadavku'
                . 'na aktivaci účtu na stránkách www.vaserealitycz.cz.</p>'
                .'<p> Pro aktivaci účtu přejděte na následující odkaz '                    
                . 'www.vaserealitycz.cz' . $this->link("Administrace:dokonceniAktivace", array("id" => $user->id, "code" => $confirmCode)) . '</p>';
            $subject = 'Aktivace uctu';
            
            $mail = new NMail();
            $mail->setFrom("info@vaserealitycz.cz")
                 ->addTo($user->email)
                 ->setSubject($subject)
                 ->setHtmlBody($message)
                 ->send();
            
            $agentModel->where("id", $user->id)->update(array(
                "password" => $password, 
                "confirm_code" => $confirmCode));
            
            $this->flashMessage("Na zadanou Vám byla odeslána zpráva s odkazem pro aktivaci účtu.");
            $this->redirect("this");
        } catch (NAuthenticationException $e) {
            $form->addError($e->getMessage());
        }
    }
}
